package misListasDobles;

public class ListasDobles {
	
	private NodeDoble inicio;
	
	public ListasDobles(){
		
		inicio = null;
	}
	
	public NodeDoble getInicio(){
		
		return inicio;
	}
	
	public void setInicio(NodeDoble valor){
		inicio = valor;
	}
	
	public boolean listaVacia(){
		
		return false;  
	}
	
	public void agregarInicio(String valor){
		
		NodeDoble nodoNew= new NodeDoble(valor,inicio, null);
		
		if (inicio != null)
			inicio.setBack(nodoNew);
		
		setInicio(nodoNew);
		
	}
	
	public void agregarFinal(String valor){
		
		NodeDoble NodePtr;
		NodeDoble nodoNew;
		
		if (size()==0) agregarInicio(valor);
		else
		{
			NodePtr=inicio;
			
			while (NodePtr.getNext() != null)
			{
				NodePtr = NodePtr.getNext();
			}
			
			nodoNew = new NodeDoble(valor,null,NodePtr);
			NodePtr.setNext(nodoNew);
		}
		
		
	}
	
	public String borrarInicio(){
		
		String valor;

		if (size()==0) valor = "LISTA VACIA";
		else
			if (size()==1)
			{
				valor  = inicio.getData();
				inicio = null;
			}
			else
			{
				valor  = inicio.getData();
				inicio.getNext().setBack(null);
				inicio = inicio.getNext();
			}
		
		return valor;
	}
	
	public String borrarFinal(){
			  
		NodeDoble NodePtr;
		String valor;
		
		if (size()==0) valor="LISTA VACIA";
		else
			if (size()==1) {
				valor=inicio.getData();
				inicio=null;
			}
			else
			{
				NodePtr=inicio;
				
				while (NodePtr.getNext().getNext() != null)
				{
					NodePtr = NodePtr.getNext();
				}
				
				valor = NodePtr.getNext().getData();
				NodePtr.setNext(null);
			}
		return valor;
	}
	
	public int size(){
		
		int total = 0;
		NodeDoble NodePtr;
		
		
		total=0;
		NodePtr=inicio;
		
		while (NodePtr != null)
		{
			NodePtr = NodePtr.getNext();
			total++;
		}
		
		return total;
	}
	
	public String toString(){
	  
		NodeDoble  NodePtr;
		String     Lista;
				
		NodePtr=inicio;
		Lista="";
		
		while (NodePtr != null)
		{
			Lista += NodePtr.getData()+"->";
			NodePtr = NodePtr.getNext();
		}
		Lista +="NULL";
		return Lista;
	}
	
	public String recorreHaciaAdelante()
	{
		return toString();
	}
	
	public String recorreHaciaAtras()
	{
		NodeDoble  NodePtr;
		String     Lista;
				
		NodePtr=inicio;
		Lista="";
		
		
		if (size()== 0)
			Lista="NULL";
		else
		{
			while (NodePtr.getNext() != null)
			{
				NodePtr = NodePtr.getNext();
			}
			
			while (NodePtr != null)
			{
				Lista += NodePtr.getData()+"->";
				NodePtr = NodePtr.getBack();
			}
			
			Lista +="NULL";
		}
		return Lista;
	}
}